package com.xufx.thread.liaoxuefeng.thread16_Future;

import java.util.concurrent.*;

/**
 * Created by xufx on 2022/1/5 22:30
 * 执行多个任务的时候，使用线程池是很方便的，只要实现Runnable接口就行，但是Runnable接口有个问题，就是没有返回值。
 * 如果需要返回值，可以使用Java提供的Callable接口。Callable接口支持泛型，可以返回指定的结果
 * ExecutorService.submit()方法的返回值是Future。
 * Future的实例代表一个未来能获取结果的对象
 * Future获取异步执行结果时候，要么调用阻塞方法get(),要么轮询看isDone()是否返回true，弊端是主线程都要跟着等待了。
 */
public class  Main {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ExecutorService executor = Executors.newFixedThreadPool(4);
        //定义任务
        Callable<String> task = ()-> "hhhhh";
        Future<String> future = executor.submit(task);
        //可能会导致阻塞（如果异步任务没有完成就会导致阻塞）
        String s = future.get();
        System.out.println(s);
    }
}
